package api

import (
	"fmt"
	"math/rand"
	"sort"
	"time"
)

var (
	datetime string
)

func init() {
	now := time.Now()
	datetime = now.Format("2006-01-02 15:04:05")
}

func Welcome() {
	welcome := "陈文小超欢迎你来到今日golang语言的学习，现在时间是：" + datetime
	fmt.Println(welcome)
	fmt.Println("--------------------------------------------------")
}

func Access() {
	interfaceStudy()
}

// 接口练习
/*定义一个自定义切片类型，用来存储结构体，然后按照结构体中指定字段进行排序*/
func interfaceStudy() {
	var heroes Heroes
	var age int = 20
	for i := 0; i < 10; i++ {
		index := rand.Intn(100)
		hero := Hero{
			Name: fmt.Sprintf("英雄-%d", i+1),
			Age:  age + index,
		}
		heroes = append(heroes, hero)
	}
	// 排序前的顺序
	for _, value := range heroes {
		fmt.Println(value)
	}
	fmt.Println("----------------------")
	sort.Sort(heroes)
	// 排序后的顺序
	for _, value := range heroes {
		fmt.Println(value)
	}
}

// Hero 定义一个结构体
type Hero struct {
	Name string
	Age  int
}

// Heroes 声明一个结构体类型切片
type Heroes []Hero

// Len 如果想用sort包中的sort方法，那么必须实现其方法
// Heroes本身就是引用类型，不需要*Heroes
func (hero Heroes) Len() int {
	return len(hero)
}

func (hero Heroes) Less(i, j int) bool {
	return hero[i].Age < hero[j].Age // 升序
	// return hero[i].Age > hero[j].Age // 降序
}

// Swap Less()返回后的结果为真，则调用Swap()进行交互
func (hero Heroes) Swap(i, j int) {
	hero[i], hero[j] = hero[j], hero[i]
}
